<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!--  console.log(typeof arr/obj) 返回值都是obj类型 js中 万物皆对象;
     所以可以用判断一个变量Array.isArray（obj/arr)是否是一个数组； Array.isArray 都是预定义； -->
    <script>
      function copy_deep(obj) {
        var newobj = Array.isArray(obj) ? [] : {};
        for (var key in obj) {
          //对象添加 obj.新键名=值；obj[key]=值 当该键名不存在时视作添加 存在时后面的值覆盖原有值
          if (typeof obj[key] != "object") {
            newobj[key] = obj[key];
          } else {
            newobj[key] = copy_deep(obj[key]);
          }
        }
        return newobj;
      }
      var obj = {
        name: "wqz",
        obj1: {
          myname: "李四",
          age: 20,
          obj2: {
            myname: "luhan",
            age: 18,
          },
        },
      };

      var res = copy_deep(obj);
      console.log(obj);
      console.log(res);
      //深拷贝 由于每一个对象都是自己的地址存放数据 修改不影响被改变的
      res.obj1.obj2.myname = "bushi";
      console.log(obj);
      console.log(res);
    </script>
  </body>
</html>
